using System;
using EnvDTE;

namespace NUnitGenAddIn.VS2005.Test
{
    /// <summary>
    /// Mock Code Class 2005
    /// </summary>
	internal class MockCodeClass2005 : MockCodeElement2005, CodeClass
	{
        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeClass2005"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
		public MockCodeClass2005(string name) : base(name)
		{}

        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeClass2005"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="children">The children.</param>
		public MockCodeClass2005(string name, CodeElements children) : base(name, children)
		{}

        /// <summary>
        /// Gets the kind.
        /// </summary>
        /// <value>The kind.</value>
		public override vsCMElement Kind
		{
			get { return vsCMElement.vsCMElementClass; }
		}

		#region CodeClass Members

        /// <summary>
        /// Gets or sets the access.
        /// </summary>
        /// <value>The access.</value>
		public vsCMAccess Access
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Adds the attribute.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="value">The value.</param>
        /// <param name="position">The position.</param>
        /// <returns><see cref="CodeAttribute"/> object</returns>
		public CodeAttribute AddAttribute(string name, string value, object position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the base.
        /// </summary>
        /// <param name="Base">The base.</param>
        /// <param name="position">The position.</param>
        /// <returns><see cref="CodeElement"/> object</returns>
		public CodeElement AddBase(object Base, object position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns><see cref="CodeClass"/> object</returns>
		public CodeClass AddClass(string name, object position, object bases, object implementedInterfaces, vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the delegate.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <returns><see cref="CodeDelegate"/> object</returns>
		public CodeDelegate AddDelegate(string name, object type, object position, vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the enum.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="access">The access.</param>
        /// <returns><see cref="CodeEnum"/> object</returns>
		public CodeEnum AddEnum(string name, object position, object bases, vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the function.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="kind">The kind.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <param name="location">The location.</param>
        /// <returns><see cref="CodeFunction"/> object</returns>
		public CodeFunction AddFunction(string name, vsCMFunction kind, object type, object position, vsCMAccess access,
		                                object location)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the implemented interface.
        /// </summary>
        /// <param name="Base">The base.</param>
        /// <param name="position">The position.</param>
        /// <returns><see cref="CodeInterface"/> object</returns>
		public CodeInterface AddImplementedInterface(object Base, object position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the property.
        /// </summary>
        /// <param name="getterName">Name of the getter.</param>
        /// <param name="putterName">Name of the putter.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <param name="location">The location.</param>
        /// <returns><see cref="CodeProperty"/> object</returns>
		public CodeProperty AddProperty(string getterName, string putterName, object type, object position, vsCMAccess access,
		                                object location)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the struct.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns><see cref="CodeStruct"/> object</returns>
		public CodeStruct AddStruct(string name, object position, object bases, object implementedInterfaces,
		                            vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the variable.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <param name="location">The location.</param>
        /// <returns><see cref="CodeVariable"/> object</returns>
		public CodeVariable AddVariable(string name, object type, object position, vsCMAccess access, object location)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets the attributes.
        /// </summary>
        /// <value>The attributes.</value>
		public CodeElements Attributes
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the bases.
        /// </summary>
        /// <value>The bases.</value>
		public CodeElements Bases
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the comment.
        /// </summary>
        /// <value>The comment.</value>
		public string Comment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the derived types.
        /// </summary>
        /// <value>The derived types.</value>
		public CodeElements DerivedTypes
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the doc comment.
        /// </summary>
        /// <value>The doc comment.</value>
		public string DocComment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the implemented interfaces.
        /// </summary>
        /// <value>The implemented interfaces.</value>
		public CodeElements ImplementedInterfaces
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets a value indicating whether this instance is abstract.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is abstract; otherwise, <c>false</c>.
        /// </value>
		public bool IsAbstract
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the members.
        /// </summary>
        /// <value>The members.</value>
		public CodeElements Members
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the Namespace.
        /// </summary>
        /// <value>The Namespace.</value>
		public CodeNamespace Namespace
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the parent.
        /// </summary>
        /// <value>The parent.</value>
		public new object Parent
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Removes the base.
        /// </summary>
        /// <param name="element">The element.</param>
		public void RemoveBase(object element)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Removes the interface.
        /// </summary>
        /// <param name="element">The element.</param>
		public void RemoveInterface(object element)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Removes the member.
        /// </summary>
        /// <param name="element">The element.</param>
		public void RemoveMember(object element)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Get_s the is derived from.
        /// </summary>
        /// <param name="fullName">The full name.</param>
        /// <returns></returns>
		public bool get_IsDerivedFrom(string fullName)
		{
			throw new Exception("The method or operation is not implemented.");
		}

		#endregion
	}
}